package demo1;

/**
 * Description:
 * Date: 2025-10-15
 * Time: 19:41
 */
//抽象类的语法：被 abstract 修饰的类就是抽象类
public abstract class Shape {
    //成员变量正常使用
    int a = 10;
    double f = 5.12;

    //成员方法正常使用
    public void test() {
        System.out.println("test()方法......");
    }

    //构造方法正常使用
    public Shape() {

    }

    //静态修饰符static正常使用
    static int b = 100;

    //抽象类 与 普通类 的不同点
    //1.当你创建一个抽象类的时候，说明你有部分类需要继承这个抽象类，抽象类的存在就是被用来继承的

    //2.抽象类中存在抽象方法
    //抽象方法的定义：（1）用abstract修饰的方法。抽象方法没有具体的实现(为子类重写，实现多态的思想服务)
    //             （2）抽象方法必须要被子类重写
    //             （3）抽象类可以没有抽象方法，但是有抽象方法的类一定是抽象类
    public abstract void draw();//方法体没有具体的实现

    //3.抽象方法不能使用private访问修饰限定符，两者作用矛盾
    //因为抽象方法是必须要被子类重写的，而private修饰的方法是只限当前类使用的，不能被子类重写
    //private abstract void func2();//error，编译错误

    //4.抽象方法不能被 static 和 final 修饰
    //（1）static属于类方法，不属于对象本身，所以静态方法不能被重写
    //（2）final关键字具有不可被重写的语义，与抽象方法必须被重写的特性矛盾
    //static abstract void func3();//error，编译错误
    //final abstract void func4();//error，编译错误

    //5.抽象类中的抽象方法必须被子类重写，除非子类也是抽象类，用abstract修饰

    //6.抽象类是抽象的，它不能被实例化一个对象

    //7.如果有一个抽象类继承了另一个抽象了，然后有一个普通类继承了作为子类的抽象类
    //  则这个子类需要实现这两个抽象类中所有没有被重写的方法



}
